Skip to content

Conversation

@jamescrosswell
Copy link
Collaborator

@jamescrosswell jamescrosswell commented Oct 22, 2025

Part of #2136

This PR adds basic support for Session Replay, including associating replays with exceptions and traces.

It does not implement any way to configure granular masks... only basic options to mask all text / images or none are provided. That can be done in a separate PR.

Note

Note that there are no new tests here as the enabling functionality was added in #4133 (those tests cover this functionality already)

@jamescrosswell jamescrosswell changed the title Ios replay Session Replay for iOS Oct 22, 2025
@codecov
Copy link

codecov bot commented Oct 22, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (version6@6200d99). Learn more about missing BASE report.

Additional details and impacted files
@@             Coverage Diff             @@
##             version6    #4664   +/-   ##
===========================================
  Coverage            ?   73.18%           
===========================================
  Files               ?      480           
  Lines               ?    17421           
  Branches            ?     3437           
===========================================
  Hits                ?    12749           
  Misses              ?     3821           
  Partials            ?      851           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

{
// For replay to work on iOS, session tracking must be enabled in the Cocoa SDKt
options.AutoSessionTracking = false;
nativeOptions.EnableAutoSessionTracking = true;
Copy link
Collaborator Author

@jamescrosswell jamescrosswell Oct 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how we now want to handle situations like this:

var hasTerminalException = processedEvent.HasTerminalException();
if (hasTerminalException)
{
// Event contains a terminal exception -> end session as crashed
_options.LogDebug("Ending session as Crashed, due to unhandled exception.");
scope.SessionUpdate = _sessionManager.EndSession(SessionEndStatus.Crashed);
}
else if (processedEvent.HasException())
{
// Event contains a non-terminal exception -> report error
// (this might return null if the session has already reported errors before)
scope.SessionUpdate = _sessionManager.ReportError();
}

... or this:

// Start a new session
try
{
var sessionUpdate = _sessionManager.StartSession();
if (sessionUpdate is not null)
{
CaptureSession(sessionUpdate);
}
}

If the CocoaSdk owns the session, do we still need to be able to start/stop sessions from the .NET SDK?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these sessions are not the same as session replay. let's not conflate these APIs

@jamescrosswell jamescrosswell marked this pull request as ready for review October 30, 2025 03:32

### Features

- Added experimental support for Session Replay on iOS ([#4664](https://github.com/getsentry/sentry-dotnet/pull/4664))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 🚫 The changelog entry seems to be part of an already released section ## 6.0.0.
    Consider moving the entry to the ## Unreleased section, please.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants